//
// Created by administered on 2025/7/15.
//

#ifndef CITYSURVEYAPP_BACKWARD_H
#define CITYSURVEYAPP_BACKWARD_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 定义常量
#define MAX_ITERATIONS 100      // 最大迭代次数
#define CONVERGENCE_THRESHOLD 1e-8  // 收敛阈值

// 定义点坐标结构体
typedef struct {
    double x;       // X坐标
    double y;       // Y坐标
    double z;       // Z坐标(高程)
} Point;

// 定义观测数据结构体
typedef struct {
    int point_id;   // 控制点ID
    double angle;   // 观测的水平角(弧度)
    double distance;// 观测的距离(如果有)
    double azimuth; // 观测的方位角(弧度)
} Observation;

// 定义计算结果结构体
typedef struct {
    Point position;      // 计算得到的测站位置
    double error_x;      // X方向误差
    double error_y;      // Y方向误差
    double error_rms;    // 点位中误差
    int iterations;      // 迭代次数
    int success;         // 计算成功标志
} CalculationResult;

// 计算两点间的距离
double distance_between_points(Point p1, Point p2);
// 计算两点间的方位角(弧度)
double azimuth_between_points(Point p1, Point p2);
// 后方交会核心算法 - 角度交会法
CalculationResult resection_angle_method(Point* control_points, Observation* observations, int num_points, double initial_x, double initial_y);
// 危险圆检测
int is_dangerous_circle(Point* control_points, int num_points);

CalculationResult calculate_resection(Point* control_points, Observation* observations, int num_points);

#ifdef __cplusplus
}
#endif

#endif //CITYSURVEYAPP_BACKWARD_H
